package pl.edu.agh.uddiProxy.query;

import dk.itst.uddi.client.types.core.OverviewDoc;
import pl.edu.agh.uddiProxy.dao.DAOHelper;
import pl.edu.agh.uddiProxy.dao.DynamicParameterDAO;
import pl.edu.agh.uddiProxy.types.Factory;
import pl.edu.agh.uddiProxy.types.TModel;

public class SaveTModelQuery {
	private dk.itst.uddi.client.query.SaveTModelQuery saveTModelQuery;
	private DynamicParameterDAO dynamicParameterDAO;
	private TModel model;
	
	public SaveTModelQuery(dk.itst.uddi.client.query.SaveTModelQuery saveTModelQuery, TModel model) {
		this.saveTModelQuery = saveTModelQuery;
		this.model = model;
		if (model == null) {
			this.model = Factory.newInstance();
		}
		dynamicParameterDAO = DAOHelper.getDynamicParameterDAO();
	}
	
	public SaveTModelQuery addCategory(String name, String value, String tModelKey) {
		saveTModelQuery.addCategory(name, value, tModelKey);
		return this;
	}
	
	public SaveTModelQuery addDescription(String value, String lang) {
		saveTModelQuery.addDescription(value, lang);
		return this;
	}
	
	public SaveTModelQuery addIdentifier(String name, String value, String tModelKey) {
		saveTModelQuery.addIdentifier(name, value, tModelKey);
		return this;
	}
	
	public OverviewDoc addOverviewDoc() {
		return saveTModelQuery.addOverviewDoc();
	}
	
	public SaveTModelQuery setName(String name) {
		saveTModelQuery.setName(name);
		return this;
	}
	
	public SaveTModelQuery setName(String name, String lang) {
		saveTModelQuery.setName(name, lang);
		return this;
	}
	
	/** execute query
	 * @return TModel with set value of TModelKey
	 */
	public TModel execute() {
		dk.itst.uddi.client.types.core.TModel tmodel = saveTModelQuery.execute();
		model.setTModelKey(tmodel.getTModelKey());
		dynamicParameterDAO.create(model.getDynamicParameter());
		return model;
	}
}
